#include <stdio.h>
#include "Message.h"

/* Mensajes de error */
static const char* errmsg[]={"Mala invocacion del programa. Ejecute ./tp0 -h para\
 más ayuda\n","Error al intentar abrir\
 al archivo.\n","Error al intentar leer desde el stream\
 de entrada.\n",};
/*Macro que devuelve un mensaje de acuerdo al codigo de error pasado por parámetro*/
#define GET_ERROR_MSJ(code) (errmsg[(code)*(-1)-1])
static const char* infomsg[]={"Uso: \n\ttp0 -h\n\ttp0 -V\n\ttp0 [OPTIONS] [file]\n\
Options:\n\t-h, --help\tPrint this information\
 and quit\n\t-V, --version\tPrint version and\
 quit\n\t-b, --bubble\tUse the bubblesort algortihm.\
\n\t-s, --shell\tUse the shellsort algorithm.\n",
"Version 1.1 - Integrantes del Grupo: Quinteros \
Mirian\n"};
bool is_info(char* opt){
	return ((OPTION(opt, S_HELP, L_HELP)) || (OPTION(opt, S_VERSION, L_VERSION)));
}
bool is_sort(char* opt){
	return ((OPTION(opt, S_BUBBLE, L_BUBBLE)) ||
		(OPTION(opt, S_SHELL, L_SHELL)));
}
/*
Evalua si la opcion es "Help" o "Version"
*/
int check_call(char* opt){

	return ((opt)&&((is_info(opt)||is_sort(opt))))?(STATUS_OK):(BAD_CALL);
}

/*
Imprime la ayuda o version segun corresponda
*/
void Print_Option_Msg(char* opt){
	printf("%s",(OPTION(opt, S_HELP, L_HELP))?(infomsg[0]):(infomsg[1]));
}

/*
Evalua el código de status especificado y:
- Si es STATUS_OK devuelve EXIT_SUCCESS
- Sino, imprime un mensaje de error correspondiente al código y devuelve EXIT_FAILURE
*/
int ERROR_MSJ(int code){
	int ret=(code == STATUS_OK)?(EXIT_SUCCESS):(EXIT_FAILURE);
	if (ret==EXIT_FAILURE)
		fprintf(stderr,"%s",GET_ERROR_MSJ(code));
	return ret;
}
